import java.sql.SQLOutput;

/**
 * -------------运算符-------------
 * 1.算数运算符，基本四则运算（加减乘除求余数）
 * 注意：都是二元运算符，使用时必须要有左右两个操作符
 *      int/int 结果还是int类型，而且还会想下取整
 *      做除法和取模时，右操作数不可以为0
 *      %不仅可以对整形取模，也可以对double类型取模，但是没有意义
 *      两侧操作数类型不一致的时候，类型向大的提升
 */

public class Stu3 {
    public static void main(String[] args) {
        System.out.println("==========除法=========");
        System.out.println(5/2);          //2
        System.out.println((float)5/2);   //2.5
        System.out.println(5/(float)2);   //2.5
        System.out.println((float)(5/2)); // 2.0


        System.out.println("=========求余数=========");
        System.out.println(10%3);   //1
        System.out.println(-10%3);  //-1
        System.out.println(10%-3);  //1
        System.out.println(-10%-3); //-1

        System.out.println("=========神奇的========");
        System.out.println(11.5%2); //1.5
        /**
         * 在java中可以两边都可以小数
         */

        //System.out.println(10/0);
        /**
         * Exception in thread "main" java.lang.ArithmeticException: / by zero
         * 	at Stu3.main(Stu3.java:25)
         * 	->异常：有很多种
         * 	其中- > ArithmeticException  算数异常
         */

        System.out.println("=========加等========");
        int a = 4;
        double d = 5.0;
        a += d;
        //对与 += 操作符来说，自动给你进行传唤
        System.out.println(a);

        //注意：（/ %）只有变量才能使用改运算符，常量不能使用

        System.out.println("====================");
        int i = 10;
        i = i++;
        System.out.println(i);
        /**
         * 在idea里面是10，但是在我们使用vs的时候却是11
         * 原因比较复杂：
         * 操作表  局部变量表
         * @param args
         *
         * ----->了解一下，不用深度理解
         */


        System.out.println("=======关系运算符=======");
        /**
         * 关系运算的结果只能返回 true 和 false
         */
        //错误示范：
        //System.out.println(5<a<10);


        System.out.println("=======逻辑运算符=======");
        /**
         * 逻辑运算符主要有三个： && || ！
         * 运算结果都是boolean类型的结果
         */

        int ab = 10;
        int bc = 20;

        //System.out.println(!a);  ->a是一个整形，所以不可以
        System.out.println(!true);
        System.out.println(!false);
    }

    public static void main1(String[] args) {
        System.out.println("==========题目=========");

         //经过强制类型转换后，变量a，b，的值分别是多少
         short a = 128;    //128
         byte b = (byte) a;//-128

        /**
         * >>右移   <<左移
         * 此时右移 的时候 左边 补符号位
         *
         * >>>无符号右移 左边统统补零
         * 没有无符号左移 <<<
         *
         * 注意： 左移相当于乘法，右移相当于除法
         *       由于计算机计算移位效率高于计算乘除，当某个代码正好惩处2的n次方的时候，可以用位移运算代替
         *       移动负数位或者移位位数过大都没有意义
         *
         * ---------短路-----------
         * 表达式1 && 表达式2
         * 两个都是真 整个表达式才能使真
         * 假设表达式1为假 表达式2为真 那么就是短路
         *------------------------
         * 表达式1 || 表达式2
         *
         */

    }


    public static void main2(String[] args) {
        /**
         * -------- & 按位与--------
         * 只要对应上有零那就是0
         *
         * -------- | 按位或--------
         * 只要对应上1，那就是1
         *
         * ----- ~ 按位取反---------
         * 0101 1011
         * 1010 0100
         *
         * ----- ^ 按位异或----------
         * 相同的是 0 不相同的是1
         */
        System.out.println("==========条件运算符=========");
        boolean flg = true == true ? false ? true : false : true;  //false
        System.out.println(flg);
        //阿里的笔试题

        //-----------运算的优先级-----------

    }

}
